﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;

namespace Server2
{
    public delegate void changeHandler();
    class Server
    {
        public event changeHandler changeSalon;
        private string _name;
        private List<Salon> _salonList;

        public List<Salon> SalonList
        {
            get { return _salonList; }
        }

        public Server(string name)
        {
            _name = name;
            _salonList = new List<Salon>();
            _salonList.Add(new Salon("Accueil", _salonList.Count));
        }


        //gestion d'évènement
        public void changeIt()
        {
            changeSalon();
        }
        //Commandes Disponibles
        public string ReqAnalyse(string req)
        {
            string[] tab = req.Split(new char[] { ' ' });
            string cmd = tab[0];
            string nom = "";

            if (tab.Length > 1)
                nom = tab[1];

            switch (cmd)
            {
                case "/help":
                    return HelpCmd();
                    
                case "/create" :
                    if (nom.Equals(""))
                        return "Vous devez spécifier un nom de salon!";
                    else
                        return CreateSalon(nom);
                case "/delete":
                    if (nom.Equals(""))
                        return "Vous devez spécifier un nom de salon!";
                    else
                        return RemoveSalon(nom);
                case "/salon" :
                    return ListeSalon();
                default :
                    return "";
            }
            
        }

        public string HelpCmd()
        {
            var info = "/help - donne la liste des fonctions disponibles\n" +
                       "/create [nom Salon] - Crée un nouveau salon\n"+
                       "/delete [nom Salon] - Supprime un salon\n"+
                       "/salon - Affiche la liste des Salons\n";

            return info;
        }

        public string CreateSalon(string name)
        {
            _salonList.Add(new Salon(name, _salonList.Count));
            changeIt();
            return "Le salon " + name + " a bien été créé";
        }

        public string RemoveSalon(string name)
        {
            bool sup = false;
            for (int i = 0; i < _salonList.Count(); ++i)
            {
                if (_salonList[i].Name.Equals(name))
                {
                    _salonList.Remove(_salonList[i]);
                    changeIt();
                    if (i != 0)
                    {
                        i = i - 1;
                    }
                    sup = true;
                }
            }
            if (sup)
                return "Le salon " + name + " a bien été supprimé";
            else
                return "Le salon n'existe pas";
        }

        public string ListeSalon()
        {
            StringBuilder str = new StringBuilder();
            foreach (Salon s in _salonList)
            {
                str.Append(s.Name + "\n");
            }
            return str.ToString();

        }

    }
}
